using System.Collections.Generic;

namespace rsync
{
    /// <summary>
    /// SessionAdapter是用于实现Session与远程设备通信的一种方式的接口。
    /// </summary>
    public interface SessionAdapter
    {
        /// <summary>
        /// SendTo将给定的消息发送到给定的远程设备，并返回发送的字节数。
        /// </summary>
        /// <param name="deviceId">远端设备</param>
        /// <param name="message">要发送的信息</param>
        /// <returns>发送的字节数，失败时为0</returns>
        uint SendTo(uint deviceId, DeviceMessage message);

        /// <summary>
        /// ReceiveFrom接收远程设备发送的所有可用消息。
        /// </summary>
        /// <returns>收到的消息列表</returns>
        List<(uint size, uint deviceId, DeviceMessage message)> ReceiveFrom();

        /// <summary>
        /// 当添加远程设备时，会话调用AddRemote。
///使用给定的远程配置与远程设备建立连接。
        /// </summary>
        /// <param name="deviceId">远端设备id</param>
        /// <param name="remoteConfiguration">用于与给定的远程设备建立连接的配置</param>
        void AddRemote(uint deviceId, object remoteConfiguration);

        uint GetRTT();
        void Close();
    }
}
